A server is generally dedicated to run one or more services requested by one or more clients (e.g., user). The server usually offers specific services such as a database server providing database service to the client, a file server providing a location for files shared among different clients, a mail server providing mail from one client to another, a print server connecting a client to a specific printer over a network, a web server allowing a client to view the content of a website, etc. Each server, regardless of the service it provides, usually includes a hardware portion and a software portion. The hardware portion allows the software portion to run a software program that performs the specific server service.
The server receives requests from clients and performs a specific task based on the client request. The server often receives an unpredictable pattern of requests at various priorities. These requests are sometimes queued for processing in a buffer, and a major problem in server design is managing an incoming queue of client requests. The server should try to maintain the size of the buffer to avoid running out of memory. In some instances, when the buffer receives a great number of requests from clients, the server rejects the requests or suspends the connection and stops reading any incoming client requests. Rejecting the requests consumes network and computer memory resources because the client resends the request.